/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ufc.quixada.dao;

import br.com.ufc.quixada.entidades.Exemplar;
import br.com.ufc.quixada.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author FuscaoGames
 */
public class ExemplarDAO {

    private Connection con;

    public ExemplarDAO() throws ClassNotFoundException {
        con = new ConnectionFactory().getConnection();
    }

    public void destroy() {
        try {
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void inserirExemplar(Exemplar exemplar) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "INSERT INTO exemplar (codigofilme, midia, valor, disponivel, reservado) VALUES (?,?,?,?,?)";
            stmt = con.prepareStatement(sql);

            stmt.setLong(1, exemplar.getCodigoFilme());
            stmt.setString(2, exemplar.getMidia());
            stmt.setDouble(3, exemplar.getValor());
            stmt.setBoolean(4, exemplar.isDisponivel());
            stmt.setBoolean(5, exemplar.isReservado());


            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public ArrayList<Exemplar> listaExemplar() throws SQLException {
        ArrayList<Exemplar> exemplares = new ArrayList<Exemplar>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM exemplar";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();

            while (rs.next()) {
                long codigoexemplar = rs.getLong("codigoexemplar");
                long codigofilme = rs.getLong("codigofilme");
                String midia = rs.getString("midia");
                String valors = rs.getString("valor");
                valors = valors.substring(2, 3)+"."+valors.substring(4);
                double valor = Double.parseDouble(valors);
                boolean disponivel = rs.getBoolean("disponivel");
                boolean reservado = rs.getBoolean("reservado");

                Exemplar exemplar = new Exemplar();
                exemplar.setCodigoExemplar(codigoexemplar);
                exemplar.setCodigoFilme(codigofilme);
                exemplar.setMidia(midia);
                exemplar.setValor(valor);
                exemplar.setDisponivel(disponivel);
                exemplar.setReservado(reservado);

                exemplares.add(exemplar);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }

        return exemplares;
    }

    public void updateExemplar(Exemplar exemplar) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "UPDATE exemplar SET codigofilme = ?, midia = ?, valor = ?, disponivel = ?, reservado = ? WHERE codigoexemplar = ?";
            stmt = con.prepareStatement(sql);

            stmt.setLong(1, exemplar.getCodigoFilme());
            stmt.setString(2, exemplar.getMidia());
            stmt.setDouble(3, exemplar.getValor());
            stmt.setBoolean(4, exemplar.isDisponivel());
            stmt.setBoolean(5, exemplar.isReservado());
            stmt.setLong(6, exemplar.getCodigoExemplar());

            stmt.executeUpdate();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public void deleteExemplar(Exemplar exemplar) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "DELETE FROM exemplar WHERE codigoexemplar = ? ";
            stmt = con.prepareStatement(sql);

            stmt.setLong(1, exemplar.getCodigoExemplar());

            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public ArrayList<Exemplar> listaExemplarByFilme(long filme) throws SQLException {
        ArrayList<Exemplar> exemplares = new ArrayList<Exemplar>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM exemplar WHERE codigofilme = ?";
            stmt = con.prepareStatement(sql);
            stmt.setLong(1, filme);

            rs = stmt.executeQuery();

            while (rs.next()) {
                long codigoexemplar = rs.getLong("codigoexemplar");
                long codigofilme = rs.getLong("codigofilme");
                String midia = rs.getString("midia");
                String valors = rs.getString("valor");
                valors = valors.substring(2, 3)+"."+valors.substring(4);
                double valor = Double.parseDouble(valors);
                boolean disponivel = rs.getBoolean("disponivel");
                boolean reservado = rs.getBoolean("reservado");

                Exemplar exemplar = new Exemplar();
                exemplar.setCodigoExemplar(codigoexemplar);
                exemplar.setCodigoFilme(codigofilme);
                exemplar.setMidia(midia);
                exemplar.setValor(valor);
                exemplar.setDisponivel(disponivel);
                exemplar.setReservado(reservado);

                exemplares.add(exemplar);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }

        return exemplares;
    }

    public Exemplar listaExemplarByCodigo(long codexemplar) throws SQLException {
        Exemplar exemplar = new Exemplar();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM exemplar WHERE codigoexemplar = ?";
            stmt = con.prepareStatement(sql);
            stmt.setLong(1, codexemplar);

            rs = stmt.executeQuery();

            if (rs.next()) {
                long codigoexemplar = rs.getLong("codigoexemplar");
                long codigofilme = rs.getLong("codigofilme");
                String midia = rs.getString("midia");
                String valors = rs.getString("valor");
                valors = valors.substring(2, 3)+"."+valors.substring(4);
                double valor = Double.parseDouble(valors);
                boolean disponivel = rs.getBoolean("disponivel");
                boolean reservado = rs.getBoolean("reservado");

                exemplar.setCodigoExemplar(codigoexemplar);
                exemplar.setCodigoFilme(codigofilme);
                exemplar.setMidia(midia);
                exemplar.setValor(valor);
                exemplar.setDisponivel(disponivel);
                exemplar.setReservado(reservado);


            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }

        return exemplar;
    }

}
